#pragma once
#include "logger.hpp"
#include <stdio.h>

namespace CH
{
	// 1、提供获取指定日志器的全局接口（避免用户自己操作单例对象）
	Logger::prt GetGlobalLogger(const std::string logger_name)
	{
		return CH::LoggerManager::GetInstance().GetLogger(logger_name);
	}

	//2、获取默认日志器的接口
	Logger::prt rootLogger()
	{
		return CH::LoggerManager::GetInstance().RootLogger();
	}

	//fmt表示接收字符串，我们将字符串传进来时传给fmt，我们的可变参数是传给__VA_ARGS__
	//加##是为了我们只传字符串，不传可变参数的情况，否则会有一个多余的逗号，
	#define debug(fmt,...) debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
	#define info(fmt,...) info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
	#define warn(fmt,...) warn(__FILE__,__LINE__,fmt,##__VA_ARGS__)
	#define error(fmt,...) error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
	#define fatal(fmt,...) fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)

	//直接使用默认日志器
	#define DEBUG(fmt, ...) CH::rootLogger()->debug(fmt, ##__VA_ARGS__)
    #define INFO(fmt, ...)  CH::rootLogger()->info (fmt, ##__VA_ARGS__)
    #define WARN(fmt, ...)  CH::rootLogger()->warn (fmt, ##__VA_ARGS__)
    #define ERROR(fmt, ...) CH::rootLogger()->error(fmt, ##__VA_ARGS__)
    #define FATAL(fmt, ...) CH::rootLogger()->fatal(fmt, ##__VA_ARGS__)

}
